import streamlit as st
from database import verify_user, add_user, get_all_users

# 初始化会话状态
if "user" not in st.session_state:
    st.session_state.user = None  # 初始化 user 属性，用于存储当前登录用户的信息

# 登录表单
def login_form():
    """
    渲染登录表单，验证用户输入的用户名和密码是否正确。
    """
    with st.form("登录"):  # 创建一个表单，表单标题为“登录”
        username = st.text_input("用户名")  # 输入用户名
        password = st.text_input("密码", type="password")  # 输入密码，类型为密码（隐藏输入）
        submit_button = st.form_submit_button("登录")  # 提交按钮

        if submit_button:  # 如果用户点击了提交按钮
            user = verify_user(username, password)  # 调用数据库函数验证用户名和密码
            if user:  # 如果验证成功
                st.session_state.user = user  # 将用户信息存储到会话状态中
                st.success("登录成功！")  # 显示成功消息
            else:
                st.error("用户名或密码错误")  # 显示错误消息

# 注册表单
def register_form():
    """
    渲染注册表单，允许新用户注册。
    """
    with st.form("注册"):  # 创建一个表单，表单标题为“注册”
        username = st.text_input("用户名")  # 输入用户名
        password = st.text_input("密码", type="password")  # 输入密码，类型为密码（隐藏输入）
        role = st.selectbox("角色", ["user", "admin"])  # 选择角色（普通用户或管理员）
        submit_button = st.form_submit_button("注册")  # 提交按钮

        if submit_button:  # 如果用户点击了提交按钮
            add_user(username, password, role)  # 调用数据库函数添加新用户

# 登出功能
def logout():
    """
    清除当前登录用户的信息，实现登出功能。
    """
    st.session_state.user = None  # 清空会话状态中的用户信息
    st.success("已登出")  # 显示成功消息

def is_logged_in():
    """
    检查用户是否已登录。

    返回值:
        bool: 如果用户已登录返回 True，否则返回 False。
    """
    # 防御性检查：确保 st.session_state.user 存在
    if "user" not in st.session_state:
        st.session_state.user = None  # 如果不存在，初始化为 None
    return st.session_state.user is not None  # 返回用户是否已登录

# 获取当前用户信息
def get_current_user():
    """
    获取当前登录用户的信息。

    返回值:
        dict: 当前登录用户的信息（包括用户名、角色等）。
    """
    return st.session_state.user  # 返回会话状态中的用户信息

# 管理员功能：查看所有用户
def admin_panel():
    """
    渲染管理员面板，显示所有用户的信息（仅管理员可访问）。
    """
    if is_logged_in() and get_current_user()["role"] == "admin":  # 检查当前用户是否已登录且角色为管理员
        st.header("管理员面板")  # 显示面板标题
        users = get_all_users()  # 调用数据库函数获取所有用户信息
        for user in users:  # 遍历所有用户
            st.write(f"用户名: {user[0]}, 角色: {user[1]}")  # 显示用户名和角色